/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package op;

import core.CreateConta;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 *
 * @author Jônatas
 */
public class CreateContaGVT implements CreateConta {

    public ContaTelefonica createConta(String[] fullFile) throws Exception {

        Pattern fonePattern = Pattern.compile("[0-9]{2}-[0-9]{4}-[0-9]{4}");

        ContaTelefonica contaTelefonica = new ContaTelefonica();

        contaTelefonica.contaMensal = new ArrayList<EntradaAbstrata>();
        String anterior = "";
        String tipo = null;
        Map<String, Object> parametersMap = null;
        Telefone origem = null;

        for (String line : fullFile) {

            line = line.trim();

            if (line.isEmpty()) {
                continue;
            }

            StringTokenizer tokenizer = new StringTokenizer(line);

            String firstToken = tokenizer.nextToken();

            if (firstToken.matches("Liga..es")) {
                tipo = line;
                continue;
            }

            Matcher foneMatcher = fonePattern.matcher(line);

            if(foneMatcher.find()) {
                String strOrigem = foneMatcher.group();
                strOrigem = strOrigem.replace("-", "");

                origem = new Telefone("0" + strOrigem);
            }


            if (tipo == null || origem == null) {
                continue;
            }

            if (firstToken.matches("[0-9]+")) {
                if (!tokenizer.hasMoreTokens()) {
                    continue;
                }

                String second = tokenizer.nextToken();

                if (second.matches("[0-9]{2}/[0-9]{2}/[0-9]{4}")) { // eh ligacao

                    parametersMap = new HashMap<String, Object>();
                    Boolean isLigacao = true;
                    parametersMap.put("isLigacao", isLigacao);
                    parametersMap.put("tipo", tipo);
                    parametersMap.put("tokenizer", tokenizer);
                    parametersMap.put("data", second);
                    parametersMap.put("line", line);
                    parametersMap.put("origem", origem);

                    EntradaAbstrata entrada = new QuebraStringGVT().quebraString(parametersMap);

                    if (entrada != null) {
                        contaTelefonica.contaMensal.add(entrada);
                    }

                } else { // nao eh ligacao

                }

            }



        }

        Collections.sort(contaTelefonica.contaMensal, new ComparatorEntradaAbstrataPorTelefone());

        contaTelefonica.contaResumida();

        return contaTelefonica;
    }
}
